/radiobutton-size 15 px def

/box-radiobutton-create {
  box-generic-create
  dup box-radiobutton-setup-methods

  dup /checked false put
  radiobutton-size 1 index put-default-baseline
  radiobutton-size 1 index put-height
  radiobutton-size 1 index put-width
  
  dup /box-radionbutton add-type
} def

/box-radiobutton-get-min-width {   % => Context This
  dup get-full-width
  exch pop
  exch pop
} def

/box-radiobutton-get-max-width {   % => Context This
  dup get-full-width
  exch pop
  exch pop
} def

/box-radiobutton-put-checked {     % => Value Box
  exch /checked exch put
} def

/box-radiobutton-reflow {          % => Context Parent This
% Set default baseline
  dup get-default-baseline
  1 index put-baseline

% Append to parent line box
  dup 2 index box-container-append-line

% Deterine coordinates of upper-left _margin_ corner
  2 copy
  box-generic-guess-corner         % => Context Parent This

% Offset parent current X coordinate
  1 index get-current-x
  1 index get-full-width add
  2 index put-current-x

% Extend parent height
  dup get-bottom-margin
  2 index box-generic-extend-height

  pop pop pop
} def

/box-radiobutton-setup-methods {
  dup /Methods get
  dup /get-min-width {box-radiobutton-get-min-width} put
  dup /get-max-width {box-radiobutton-get-max-width} put
  dup /reflow        {box-radiobutton-reflow} put
  dup /show          {box-radiobutton-show} put
  pop pop
} def

/box-radiobutton-show {            % => Viewport This
% Get check center
  dup get-left
  1 index get-right add 2 div

  1 index get-top
  2 index get-bottom add 2 div     % => Viewport This X Y

% Calculate checkbox size
  2 index /get-width call-method
  3 div                            % => Viewport This X Y Size

  2 index exch
  2 index exch                     % => Viewport This X Y X Y Size

  0 360

% Draw checkbox
  newpath
  0.25 setlinewidth
  arc stroke                       % => Viewport This X Y

% Draw checkmark if needed
  2 index /checked get {
    2 index /get-width call-method
    6 div                          % => Viewport This X Y CheckSize

    0 360
    newpath
    arc fill                       % => Viewport This
  } { pop pop } ifelse

  pop pop
} def